public class code2 {
//    力扣150 除自身以外的数组乘积

    public int[] productExceptSelf(int[] nums) {
        // 从左向右对数组进行一遍乘积
        // 从右向左对数组进行一遍乘积
        // 之后将两个数组中相同位置的值相乘，就可以的到整个数组在排除某一位置后其余元素的乘积
        // 这道题目的数学思路是，前缀乘积 * 后缀乘积 最终就可以的到想要的值
        int n = nums.length;

        int[] left = new int[n];
        int[] right = new int[n];

        int[] answer = new int[n];

        // 我们设定起始位置的值为 1
        left[0] = 1;
        for(int i = 1; i < n; i++) {
            left[i] = nums[i - 1] * left[i - 1];
        }

        // 因为从后向前，所以我们需要设定末尾值为 1
        right[n - 1] = 1;
        for(int i = n - 2; i >= 0; i--) {
            right[i] = nums[i + 1] * right[i + 1];
        }

        // 将两个数组相乘即可
        for(int i = 0; i < n; i++) {
            answer[i] = left[i] * right[i];
        }

        return answer;
    }

}
